package com.itcam.interview.pro00.disignmodel.observe;

/**
 * 主题接口，定义了主题（被观察对象）需要实现的方法。
 * 主题可以注册观察者、移除观察者，并在状态发生变化时通知所有观察者。
 */
// 主题接口
interface Subject {
    /**
     * 注册一个观察者到主题中。
     * 当主题状态发生变化时，会通知所有已注册的观察者。
     * @param observer 要注册的观察者对象
     */
    void registerObserver(Observer observer);

    /**
     * 从主题中移除一个已注册的观察者。
     * 移除后，该观察者将不会再收到主题状态变化的通知。
     * @param observer 要移除的观察者对象
     */
    void removeObserver(Observer observer);

    /**
     * 通知所有已注册的观察者主题状态发生了变化。
     * 主题会调用每个观察者的 update 方法传递最新的状态信息。
     */
    void notifyObservers();
}
